class Solution {
public:
/*
// 先减再加最后结果为只出现一次的数字
    int singleNumber(vector<int>& nums){
        sort(nums.begin(), nums.end());  //排序数组
        int ret = nums[0];
        for(int i = 1; i < nums.size(); ++i){
            if(i & 1){ // 如果是奇数 加
                ret -= nums[i];   
                if (ret != 0){   // 说明找到了只出现一次的元素
                    ret = nums[i-1];
                    break;
                }          
            }
            else{  //如果是偶数 减
                ret += nums[i];                 
            }    
        }
        return ret;
    }
*/

/*  // 异或奇技淫巧
    int singleNumber(vector<int>& nums){
        // 求所有元素按位异或的和
        return accumulate(nums.begin(),nums.end(),0,bit_xor());
        // accumulate定义在#include<numeric>中，作用有两个，一个是累加求和，另一个是自定义类型数据的处理
        // bit_xor 将元素按位异或
    }
*/

    int singleNumber(vector<int>& nums){
        int singlenum = 0;
        for(auto i : nums){
            singlenum ^= i;
        }
        return singlenum;
    }

};